转载请标明出处
遗传算法的实现有6个主要因素:参数的编码、初始种群的设定、适应度函数的设计、遗传操作、算法控制参数的设定、约束条件的处理。参数的编码即把一个问题的可行解从其解空间转换到遗传算法所能处理的搜索空间的转换方法。BTW,解码就是编码的逆过程。
编码问题是遗传算法的关键,变异算子和交叉算子都受到编码方法的影响,因此编码问题极大的影响了遗传计算的效率。
常见的编码方法有:二进制编码、格雷码、浮点数编码、多参数级联编码、多参数交叉编码等。
编码的评估策略:完备性、健全性、非冗余性
1.二进制编码
定义:二进制编码方法是使用二值符号集{0,1},它所构成的个体基因型是一个二进制编码符号串。二进制编码符号串的长度与问题所要求的求解精度有关。
优点:
- 简单。无论是编码还是解码操作都非常方便和快捷。
- 方便交叉和变异。
- 符合最小字符集编码原则。
缺点:
- 不适合连续函数的优化问题,局部搜索能力差。连续的数值之间有时候存在海明距离大的问题。例如63和64对应的二进制分别是0111111和1000000。(连续数值对应的二进制数7位全都不同)对于高精度的问题,变异后可能会出现远离最优解的情况,表现型不稳定。
案例:
假设有f(x),x∈[0,1023],采用定长二进制编码,串0010101111就代表了175,编码精度为1.
2.格雷码
定义:
格雷码编码是其连续的两个整数所对应的编码之间只有一个码位是不同的,其余码位完全相同。
由二进制编码转格雷码的转换公式为:
gm = bm
gi = b(i+1)⊕bi ,i=m-1,m-2,…2,1
由格雷码转二进制的转换公式为:
bm = gm
bi = b(i+1)⊕gi, i=m-1,m-2,…2,1
优点:
- 提升了算法的局部搜索能力
- 方便交叉和变异。
- 符合最小字符集编码原则。
案例:
编码比较:
原码 二进制 格雷码
0 000 000
1 001 001
2 010 011
3 011 010
4 100 110
5 101 111
6 110 101
7 111 100
3.浮点数编码
定义:
个体基因值用某范围内的一个实数来表示。编码长度等于决策变量的个数。
优点:
- 精度高,适用于连续变量问题。避免了海明悬崖问题。
- 适用于表示范围比较大的数值,适合空间较大的一串算搜索
- 降低了计算复杂性,提升效率
- 便于遗传算法与经典优化方法的混合使用
- 便于设计针对问题的专门知识的知识型遗传算子
- 便于处理复杂的决策变量约束条件,适合于组合优化问题
案例:
假设某优化问题有五个变量,每个变量的变化范围都不同。其中X={5.30,5.20,4.70,3.40,4.80}就是一个基因型,对应的表现型是x={5.30,5.20,4.70,3.40,4.80}。
4.排列编码
定义:
排列编码主要针对一些特殊问题。将有限集合的元素尽心排列。假如集合内有m个元素,那么就有m!个排列组合。
优点:
- 对于NPhard问题,m较大,穷举法失效,这时就可以用遗传算法。
案例:
常见的应用有旅行商(TSP)问题、作业调度(job-scheduling)问题以及资源调度(resource-scheduling)问题等。
5.二倍体编码
定义:
模拟了生物二倍体基因遗传方式。染色体内含有相同的形状信息。二倍体生物从基因型到表现型有一定的显隐性。不同的等位基因表现出不同的表现特征。
案例:
假设有基因型AaBbCCdd,A a是等位基因。假如A、a表达的是眼睛的颜色,A为棕色,a为蓝色,AA则为棕色眼睛,aa为蓝色眼睛,Aa则根据显隐性的情况显色。
未完待续。。